<?php

    // База данных
    $passfile = constant('CURRENTSITE_DIR').'/private/access.inc';
    $servername = constant('SITE_NAME');
    if(!file_exists($passfile))
    {
        CriticalError('Ошибка в файле dbaccess.inc. Не найден файл с настройками доступа к БД.');
    }
    require_once($passfile);

    if(!is_array($dbaccess))
    {
        $dbaccess = Array();
    }
    $dbaccess2 = Array();
    foreach($dbaccess as $aces)
    {
        if(is_array($aces))
        {
            $dbaccess2[] = $aces;
        }
    }
    $dbaccess = $dbaccess2;

    if(isset($_REQUEST['addnewbdconnect']))
    {
        $bdsite = $_REQUEST['bdsite'];
        $bdhost = $_REQUEST['bdhost'];
        $bdname = $_REQUEST['bdname'];
        $bduser = $_REQUEST['bduser'];
        $bdpass = $_REQUEST['bdpass'];
        $dbaccess[] = Array('host' => $bdhost, 'bdname' => $bdname, 'user' => $bduser, 'pass' => $bdpass);
        $f = fopen($passfile, "w");
        fwrite($f, "<?"."php\r\n$"."dbaccess = ".var_export($dbaccess, true)."; ?".">");
        fclose($f);
    }

    $needform = false;
    if((!is_array($dbaccess)) || (is_array($dbaccess) && count($dbaccess) == 0))
    {
        ShowConnectForm("Настройте доступ к БД данного сайта($servername).");
    }

    function ShowConnectForm($errortext, $data = null)
    {
        global $servername;
        ?>
        <form action="" method="POST">
            <table>
                <tr><td>Сайт:</td><td><input name="bdsite" value="<?php echo $servername; ?>"></td></tr>
                <tr><td>Хост:</td><td><input name="bdhost" value="localhost"></td></tr>
                <tr><td>Имя БД:</td><td><input name="bdname"></td></tr>
                <tr><td>Логин:</td><td><input name="bduser"></td></tr>
                <tr><td>Пароль:</td><td><input name="bdpass"></td></tr>
                <tr><td>&nbsp;</td><td><input value="Добавить" type="submit" name="addnewbdconnect"></td></tr>
            </table>
        </form>
        <?php
        CriticalError($errortext);
    }


    // Функция экранирования переменных для SQL запросов
    function quote_smart($value)
    {
        // если magic_quotes_gpc включена - используем stripslashes
        if (get_magic_quotes_gpc())
        {
            $value = stripslashes($value);
        }
        // Если переменная - число, то экранировать её не нужно
        // если нет - то окружем её кавычками, и экранируем
        if(!is_numeric($value))
        {
            return '\''.mysql_real_escape_string($value).'\'';
        }
        else
        {
            return '\''.$value.'\'';
        }
    }

    function transact_query($query_array)
    {
        reset($query_array);
        $errno = 0;
        $errtext = "";
        $result = mysql_query("START TRANSACTION");
        if(mysql_errno())
        {
            CriticalError("Не удалось инициализировать транзакцию: ".mysql_error());
        }
        if(!mysql_errno())
        {
            while(list ($key, $val) = each ($query_array))
            {
                $result = @mysql_query($val);
                if(mysql_errno())
                {
                    $errno = mysql_errno();
                    $errtext = mysql_error();
                    break;
                }
            }
            if($errno)
            {
                $result = @mysql_query("ROLLBACK");
                CriticalError("Ошибка при выполнении транзакции #$errno, SQL: $val ".$errtext);
                return false;
            }
            else
            {
                $result = @mysql_query('COMMIT');
                return true;
            }
        }
    }

    // считывание настроек сайта (только первый эл-т массива)
    foreach($dbaccess as $db_connect_parameters)
    {
        $host = $db_connect_parameters['host'];
        $user = $db_connect_parameters['user'];
        $pass = $db_connect_parameters['pass'];
        $bdname = $db_connect_parameters['bdname'];
        // +6ms
        $lnk = @mysql_connect($host, $user, $pass);
        if(!mysql_errno())
        {
            define('host', $host);
            define('user', $user);
            define('pass', $pass);
            define('bdname', $bdname);
            break;
        }
    }

    if(!defined('host') || !defined('user') || !defined('pass') || !defined('bdname'))
    {
        ShowConnectForm(new Exception(mysql_error()));
    }

    mysql_query("SET NAMES 'utf8'", $lnk);
    mysql_query ("set character_set_client='utf8'");
    mysql_query ("set character_set_results='utf8'");
    mysql_query ("set collation_connection='utf8_general_ci'");
    mysql_select_db($bdname, $lnk) or die('Не удалось выбрать БД «'.CONSTANT('bdname').'» на сервере «'.CONSTANT('host').'» '.mysql_error());

    try
    {
        /*
        require_once(constant('MIKRON_DIRECTORY').'/lib/pear/PEAR.php');
        require_once(constant('MIKRON_DIRECTORY').'/lib/pear/DB.php');
        $myDB =& DB::factory('mysql'); // подсоединяемся к mysql
        $myDB -> connect(DB::parseDSN("mysql://$user:$pass@$host/$bdname")); //подсоединяемся к базе
        */
    }
    catch(Exception $ex)
    {
        echo $ex->getMessage();
    }

    // В новых версиях MySQL (начиная с 4.1.0) изменился порядок работы с
    // национальными кодировками, поэтому старый код может вызывать появление
    // в таблице базы данных знаков вопроса '????????' вместо русского текста.
    // Для того, чтобы этого не возникало в начало PHP-скрипта, после установки
    // соединения с базой данных, следует поместить следующие строки:
    // mysql_query ("set character_set_client='cp1251'");  
    // mysql_query ("set character_set_results='cp1251'");  
    // mysql_query ("set collation_connection='cp1251_general_ci'");

?>